<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Jumony入门（一）从这里开始 - namespace Ivony - 博客园</title>
<meta name="keywords" content="Jumony入门,从这里开始" />
<meta name="description" content="Jumony试图提供在传统Web开发模型中许多难以解决问题的解决方案。一言蔽之，Jumony的一切基础建立在服务器端的HTML DOM之上。在服务器端将HTML（文件或动态网页技术的输出）按照客户端浏览器的处理方式解析为HTML DOM。操纵和处理HTML DOM，就像我们在客户端用JavaScri" />
<link type="text/css" rel="stylesheet" href="http://www.cnblogs.com/css/common.css"/>
<link id="MainCss" type="text/css" rel="stylesheet" href="http://www.cnblogs.com/Skins/Minyx2_Lite/style.css"/>
<link type="text/css" rel="stylesheet" href="http://www.cnblogs.com/css/common2.css"/>
<link type="text/css" rel="stylesheet" href="http://common.cnblogs.com/css/shCore.css"/>
<link type="text/css" rel="stylesheet" href="http://common.cnblogs.com/css/shThemeDefault.css"/>
<link type="text/css" rel="stylesheet" href="http://www.cnblogs.com/Ivony/customcss.aspx?id=17776"/>
<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/Ivony/rss"/>
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/Ivony/rsd.xml"/> 
<script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"></script>  
<script src="/script/common.js" type="text/javascript"></script>
<script src="http://common.cnblogs.com/script/jquery.json-2.2.min.js" type="text/javascript"></script>
<script src="/Skins/Minyx2_Lite/script/skin.js" language="javascript" type="text/javascript"></script>
<script type="text/javascript" src="http://common.cnblogs.com/script/shCore.js"></script>
<script type="text/javascript" src="http://common.cnblogs.com/script/shLanguage.js"></script>
</head>
<body>
    <form method="post" action="jumony-guide-1.html" id="Form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
    theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


        
<!--PageBeginHtml Block Begin-->
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-20652971-1']);
  _gaq.push(['_setDomainName', '.cnblogs.com']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

<div style="position: absolute; height: 8px; width: 100%; top: 100px; background-color: #6699CC;"></div>

<script language="javascript">

$( function()
{


$("#side-archives").before( '<div id="twitter"><h2>@Ivony</h2><ifra'+'me id="sina_widget_1688446613" style="width:100%; height:500px;" frameborder="0" scrolling="no" src="http://v.t.sina.com.cn/widget/widget_blog.php?uid=1688446613&height=500&skin=wd_01&showpic=1"></ifra'+'me></div>' );

} );

$( function()
{
$( "li:has( .louzhu )" ).css( "background-color", "#FFFFF0" );//突出本人回帖
} );
</script>

<!--[if lte IE 7]>
<script>
$( function()
{
  $(".minyx").after( "<div style='color: red; background-color: #FFFFBB; float: left; font-weight: bold; padding: 2px;'>警告！您正在使用已经过时的浏览器，请尽快更新！</div>" );
});
</script>
<![endif]-->
<!--PageBeginHtml Block End-->


<div id="container">
    <a class="minyx" href="http://www.spiga.com.mx/">Spiga</a>
    <ul id="topMnu">
        <!-- 统计数据 -->
        <li>
        
            
Posts - 88, 
Articles - 0, 
Comments - 1152
<!---->            
        
        </li>
        <!-- 这边可以增加一些链接 -->
        <!-- 博客园 -->
        <li><a href="http://www.cnblogs.com">Cnblogs</a></li>
        <!-- 管理 -->
        <li id="topMnu-dashboard"><a id="lnkDashboard" href="http://www.cnblogs.com/Ivony/admin/EditPosts.aspx">Dashboard</a></li>
        <li><a id="lnkLogin" href="http://passport.cnblogs.com/login.aspx?ReturnUrl=http://www.cnblogs.com/Ivony/archive/2010/12/19/jumony-guide-1.html">Login</a></li>
    </ul>
    
    <script language="javascript" type="text/javascript">
        var m = window.__blog.topMenuRendered;
        if (m) { m(__$("topMnu")); }
    </script>

    <div id="header">
        <ul id="menu">
                <!-- 首页，当前section加上current类 -->
                <li id="menu-home" class="current"><a id="lnkHome" href="http://www.cnblogs.com/Ivony/">Home</a></li>
                <!-- 联系 -->
                <li id="menu-contact"><a id="lnkContact" href="http://space.cnblogs.com/msg/send/Ivony...">Contact</a></li>
                <!-- 相册 -->
                <li id="menu-gallary"><a id="lnkGallery" href="http://www.cnblogs.com/Ivony/gallery.html">Gallery</a></li>
                <!-- Rss订阅 -->
                <li id="rss"><a id="lnkRss" href="http://www.cnblogs.com/Ivony/rss">RSS</a></li>
        </ul>
	<div id="newmsg"></div>
        <h1>
            <!-- 主标题 -->
            <a id="lnkBlogTitle" href="http://www.cnblogs.com/Ivony/"><span style="color: blue;">namespace</span> <span style="color: #000000;">Ivony</span></a>
            <!-- 子标题 -->
            <small><a href="http://www.cnblogs.com/ivony/archive/2007/06/10/778489.html" target="_blank">DbUtility</a> - XCommunity - <a href="http://jumony.codeplex.com/">Jumony</a> - ?

上海 - 北京 - 深圳 - ?</small>
        </h1>
    </div>
    
    <script language="javascript" type="text/javascript">
        var m = window.__blog.headerRendered;
        if (m) { m(__$("header")); }
    </script>
        
    <div id="wrapper"> 
        <div id="content">
             <script language="javascript" type="text/javascript">
                        var m = window.__blog.preRenderPosts;
                        if (m) { m(); } 
            </script>
            
					
<div class="post" id="post"><a name="top"></a>
    <h2>
        <a id="ctl05_lnkTitle" href="http://www.cnblogs.com/Ivony/archive/2010/12/19/jumony-guide-1.html">Jumony入门（一）从这里开始</a></h2>
    <small>
        2010-12-19 18:35
        by
        Ivony...,
        2803
        visits,
        <a href="#" onclick="PutInWz();return false;">网摘</a>,
        <a href="http://www.cnblogs.com/Ivony/AddToFavorite.aspx?id=1910698">收藏</a>,
        <a id="ctl05_lnkEdit" href="http://www.cnblogs.com/Ivony/admin/EditPosts.aspx?postid=1910698">编辑</a></small>
    <div class="entry">
        <div id="cnblogs_post_body"><p>首先介绍一下Jumony是什么，Jumony是一个.NET的开源项目，项目主页位于：<a href="http://jumony.codeplex.com/">http://jumony.codeplex.com/</a>，采用LGPL协议发布。</p>
<p>Jumony试图提供在传统Web开发模型中许多难以解决问题的解决方案。一言蔽之，Jumony的一切基础建立在服务器端的HTML DOM之上。在服务器端将HTML（文件或动态网页技术的输出）按照客户端浏览器的处理方式解析为HTML DOM。操纵和处理HTML DOM，就像我们在客户端用JavaScript干的那些事情一样，不同的是，Jumony可以使你依托强大的.NET Framework，来解决以前用脚本和服务器端技术都难以解决的事情。</p>
<p>&nbsp;</p>
<h2>下载部署</h2>
<p>Jumony现在最稳定的版本是Milestone 1，其下载地址在：<a href="http://jumony.codeplex.com/releases/view/51380">http://jumony.codeplex.com/releases/view/51380</a>，对于第一次接触Jumony的朋友来说，建议先下载编译好的DLL，即Binary选项：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834499949.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834513687.png" border="0" alt="image" width="564" height="305" /></a></p>
<p>点击Binary链接后，会出现Jumony的许可协议（也就是LGPL），点击<a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834516686.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834528605.png" border="0" alt="image" width="98" height="31" /></a>，开始下载。下载后是一个ZIP文件包，打开后可以看到里面有一个目录Binary，将其随便展开到一个文件夹，例如C:\Jumony。然后清点一下DLL的数量，正常情况下应该包含如下DLL：</p>
<ul>
<li>Ivony.Core.dll，包含基础接口，和一些提高编程体验基础扩展方法 </li>
<li>Ivony.Web.Html.dll，Jumony的核心DLL，定义了抽象HTML DOM模型。并提供大量扩展方法来操纵HTML DOM </li>
<li>Ivony.Web.Html.Binding.dll，提供数据绑定支持 </li>
<li>Ivony.Web.Html.Parser.dll，即Jumony Parser，一个优秀的Html Parser，可以分析HTML文本并创建HTML DOM。 </li>
<li>HtmlAgilityPack.dll，HtmlAgilityPack是另一个开源项目，与Jumony Parser一样，是另一个可以分析HTML文本并创建DOM的工具，理论上Jumony可以使用任何HTML分析器来分析HTML并为自己所用，只要有合适的Adapter。HtmlAgilityPack的项目主页位于：<a href="http://htmlagilitypack.codeplex.com/">http://htmlagilitypack.codeplex.com/</a>       <br />值得注意的是，当你下载Jumony的源代码包或是直接查看Jumony的源代码时，将不会有HtmlAgilityPack的任何源代码，可以去HtmlAgilityPack的主页下载。HtmlAgilityPack的授权许可协议与Jumony是不同的，这一点要特别注意。 </li>
<li>HtmlAgilityPack.Adapter.dll，HtmlAgilityPack的适配器，使得HtmlAgilityPack可以当作Jumony的一个分析器来使用。事实上在M1版本中，Jumony Parser甚至不如HtmlAgilityPack成熟。 </li>
</ul>
<p>除了DLL文件外，pdb文件是用于调试的，而xml文件则是智能提示所必须的，建议都不要删除，保留。</p>
<p>然后我们需要新建一个网站来玩一下，在这之前，首先要确保你的VS至少是2008或以上，Jumony的最低.NET Framework版本要求是3.5。还在2.0的朋友，就只能说一声抱歉了，因为Jumony的选择器和导航扩展方法乃至于绑定支持，都是极度依赖于LINQ技术的。几乎不可能在.NET Framework 2.0之下提供简单的实现。</p>
<p>那么我们先新建一个网站（Web项目也行，这里用网站作为示范）：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834537949.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/20101219183454326.png" border="0" alt="image" width="293" height="249" /></a></p>
<p>这里我把网站建立在了P:\WebSite\JumonyDemo，然后添加引用，找到刚才存放DLL的文件夹，将六个DLL一股脑全部添加引用：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834557685.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834576964.png" border="0" alt="image" width="278" height="366" /></a></p>
<p>然后我们需要配置web.config文件来添加Jumony的环境支持，在Jumony的下载页面上，有现成的已经配置好的web.config下载：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191834583418.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835008826.png" border="0" alt="image" width="406" height="188" /></a></p>
<p>根据ASP.NET的版本，可以选择不同的web.config下载。然后替换系统默认的web.config即可，我这里默认创建的网站便是ASP.NET 4的，所以我下载ASP.NET 4的web.config，其内容是这样的：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835014550.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835038845.png" border="0" alt="image" width="799" height="236" /></a></p>
<p>httpHandlers和httpModules里面的内容便是新增的，如果你需要在现有的一个web.config文件中增加Jumony的环境配置，则只需要下载ASP.NET 4的web.config文件，然后将这两段拷贝整合即可。</p>
<p>然后就可以开始测试Jumony环境了，首先确认一下Web服务器使用的是VS自带的默认ASP.NET Development Server还是IIS，如果是使用IIS调试，则建议先换为VS自带的默认服务器，因为Jumony需要截获html和htm文件的请求，这已经在web.config中配置，但如果使用IIS作为服务器，则还需要配置IIS这两个扩展名的映射，这很麻烦，而我们在这里只是先玩一下Jumony，所以建议先用默认的服务器。</p>
<h2>来干点坏事</h2>
<p>先随便找一个HTML文件来测试一下Jumony是否已经正常工作，这里我写一个Hello World：    <br /><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835037350.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835042824.png" border="0" alt="image" width="418" height="147" /></a></p>
<p>将其保存为index.htm：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835052725.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835062626.png" border="0" alt="image" width="273" height="235" /></a></p>
<p>然后添加这个HTML文件的处理程序，Jumony的处理程序事实上就是一个ashx文件，然后要求文件名除了ashx这个扩展名之外的前段与被处理的文件的文件名一模一样，这样Jumony的RewriteModule就会自动映射。所以这里我要添加的处理程序的文件名是index.htm.ashx。首先在添加项的对话框中选择一般处理程序（Generic Handler），然后输入文件名index.htm.ashx：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835088283.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835109655.png" border="0" alt="image" width="846" height="342" /></a></p>
<p>系统会帮我们自动添加一些代码，除了类型声明和using之外的代码都是多余的，直接删掉：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835117048.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835125030.png" border="0" alt="image" width="416" height="138" /></a></p>
<p>系统默认的类型名称是index，但为了避免冲突，Jumony建议类名还是命名为index_htm比较妥当，当然这不是必须的。然后我们要添加许多using，以及修改继承的基类型：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835135770.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835142814.png" border="0" alt="image" width="711" height="221" /></a></p>
<p>JumonyHandler是一个抽象类，有一个Process方法需要我们实现：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835157731.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835168538.png" border="0" alt="image" width="404" height="123" /></a></p>
<p>通过实现这个方法，可以让我们对HTML进行操控，当进入这个方法时，HTML文档（index.htm）已经被分析完毕成为一个IHtmlDocument对象静静的躺在一个叫做Document的属性里，等着我们来操控。</p>
<p>首先我们来了解Find方法，这个方法和jQuery的一样，使用CSS选择器来选择元素，在这里我们把Hello World的body元素找出来：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835177599.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835177533.png" border="0" alt="image" width="401" height="122" /></a></p>
<p>Single是LINQ中的方法，所以我说没有LINQ将寸步难行，因为Find方法的结果是一个元素（IHtmlElement）集合，这里用Single方法取出唯一的元素，因为我们知道body一定是唯一的元素。</p>
<p>然后我们干点什么好呢？要不把Hello World改为Hello Jumony!如何？</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835188273.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835208108.png" border="0" alt="image" width="681" height="263" /></a></p>
<p>这就完成了我们的第一件&ldquo;坏事&rdquo;，赶紧来看看成果。在解决方案中右键点击index.htm，然后选择在浏览器中查看，不出意外的话，应该会看到这样的效果：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835227387.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835233874.png" border="0" alt="image" width="439" height="132" /></a></p>
<p>哦耶，真的变成了Hello Jumony。</p>
<p>来查看一下源代码：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835247156.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835247090.png" border="0" alt="image" width="395" height="132" /></a></p>
<p>清楚的看到了index.htm文件<strong>输出</strong>被Jumony引擎精确篡改。</p>
<p>&nbsp;</p>
<p>再看看<strong>原始的文件</strong>（即index.htm这个文件原始的样子）是不是还是原来的样子：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Ivony/201012/20101219183525579.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/Ivony/201012/201012191835261559.png" border="0" alt="image" width="435" height="221" /></a></p>
<p>确实没有变化，还是Hello World。</p>
<p>&nbsp;</p>
<p>Jumony截获了htm的请求，并篡改了其结果，完成。</p></div>
        
<script type="text/javascript">
if ($ != jQuery) {
	$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 17776;
var cb_entryId = 1910698;
var cb_blogApp = "Ivony";
var cb_blogUserGuid = "d751360b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2010/12/19 18:35:00';
</script>
<div id="blog_post_info_block">
<div id="BlogPostCategory"></div>
<div id="EntryTag"></div>
<div id="green_channel" style="display:none;">
绿色通道：<a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(cb_entryId,cb_blogId,1);green_channel_success(this,'谢谢推荐！');">好文要顶</a><a id="green_channel_follow" onclick="c_follow();" href="javascript:void(0);">关注我</a><a id="green_channel_favorite" onclick="AddToWz(1910698);return false;" href="javascript:void(0);" >收藏该文</a><a id="green_channel_contact" href="http://space.cnblogs.com/msg/send/Ivony..." target="_blank">与我联系</a>
</div>
<div id="digg_block">
<div id="author_profile">
<div id="author_profile_info" class="author_profile_info">
<div id="author_profile_detail" class="author_profile_info">
</div>
</div>
<div class="clear"></div>
<div id="author_profile_honor"></div>
<div id="author_profile_follow"></div>
</div>
<div id="div_digg" style="display:none;">										
	<div class="diggit" onclick="DiggIt(cb_entryId,cb_blogId,1)"> 
		<span class="diggnum" id="digg_count"></span>
	</div>
	<div class="buryit" onclick="DiggIt(cb_entryId,cb_blogId,2)"> 
		<span class="burynum" id="bury_count"></span>
	</div>
	<div class="clear"></div>	
	<div class="diggword" id="digg_tips"></div>	
</div>
</div>
<div class="clear"></div>
<div id="post_next_prev">
</div>
</div>
<script type="text/javascript">
LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
GetPrevNextPost(cb_blogId, cb_entryCreatedDate);
</script>




    </div>
    <span><img src ="http://www.cnblogs.com/Ivony/aggbug/1910698.html?type=1&webview=1" width="1px" height="1px" alt=""/></span>
    <ul class="postmetadata">
        <li id="ctl05_liCate" class="icon_cat"><strong>Categories: </strong>
            <a href='http://www.cnblogs.com/Ivony/category/268656.html'>Jumony</a>, <a href='http://www.cnblogs.com/Ivony/category/269267.html'>OpenSource</a>, <a href='http://www.cnblogs.com/Ivony/category/53520.html'>.NET</a>, <a href='http://www.cnblogs.com/Ivony/category/277318.html'>Jumony Guide</a>            
        </li>
        
        
    </ul>
</div>

<script language="javascript" type="text/javascript">
    var m = window.__blog.postRendered;
    if (m) { m(__$("post")); }
</script>

<script language="javascript" type="text/javascript">
    var m = window.__blog.postRenderPosts;
    if (m) { m(); }
</script><a name="pagedcomment"></a>    

<a class="addcomment" href="#comment_tip">Add your comment</a>

<h3 id="comments">32 条回复</h3>
<div class="feedbackNoItems"><span id='span_comment_maxid' style='display:none'>2029614</span></div>

<script language="javascript" type="text/javascript">
    var m = window.__blog.preRenderCommentList;
    if (m) { m(); }
</script>

<ol class="commentlist" id="commentList">	

		<li class="alt">
			<h5>
				<cite><a href="#1991530">#1楼</a><a name="1991530" id="comment_anchor_1991530"></a></cite> <a id="Comments1_CommentList_NameLink_0" href="http://www.cnblogs.com/zc22/" target="_blank">辰</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e8%be%b0" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 18:55</small>
			</h5>
			<span id="comment_body_1991530" class="blog_comment_body">hoho。看了一下，原来换了个名字。<br/>之前是服务端的dom选择器，如果有dom这个说法。<br/><br/>建议一下，开篇第一句话我看了半天没有明白这个框架是干嘛的，到最后看了例子才明白。<br/>能再提炼下，新手就入门很快了。<br/></span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;辰&quot;,1991530,&quot;OBlyuqchgp1sIZiX0BOW4JQ7vN9oWv82iCGrPB07zFNVgQa8JuymlA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991530,&quot;OBlyuqchgp1sIZiX0BOW4JQ7vN9oWv82iCGrPB07zFNVgQa8JuymlA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e8%be%b0" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_0" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl00$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_0" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991532">#2楼</a><a name="1991532" id="comment_anchor_1991532"></a></cite> <a id="Comments1_CommentList_NameLink_1" href="http://www.cnblogs.com/zc22/" target="_blank">辰</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e8%be%b0" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 18:57</small>
			</h5>
			<span id="comment_body_1991532" class="blog_comment_body">首先介绍一下Jumony是什么，Jumony是一个.NET的开源项目，项目主页位于：<a href="http://jumony.codeplex.com/" target="_blank">http://jumony.codeplex.com/</a>，采用LGPL协议发布。<br/>Jumony是一个试图提供在传统Web开发模型中许多难以解决问题的解决方案。一言蔽之，Jumony的基础一切基础建立在服务器端的HTML DOM之上。在服务器端将HTML（文件或动态网页技术的输出）按照客户端浏览器的处理方式解析为HTML DOM。从而在服务器端提供与客户端脚本一致的体验，在我看来，这比把C#编译成脚本在客户端执行更为靠谱。Jumony可以使你依托强大的.NET Framework，来解决以前不得不用脚本来解决的一些问题。<br/><br/>============<br/><br/>Jumony是在服务端使用DOM模型控制、处理页面HTML DOM。<br/></span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;辰&quot;,1991532,&quot;OBlyuqchgp1sIZiX0BOW4JQ7vN9oWv82iCGrPB07zFNVgQa8JuymlA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991532,&quot;OBlyuqchgp1sIZiX0BOW4JQ7vN9oWv82iCGrPB07zFNVgQa8JuymlA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e8%be%b0" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_1" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl01$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_1" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991542">#3楼</a><a name="1991542" id="comment_anchor_1991542"></a></cite> <a id="Comments1_CommentList_NameLink_2" href="http://www.cnblogs.com/DreamWork/" target="_blank">非空</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e9%9d%9e%e7%a9%ba" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 19:14</small>
			</h5>
			<span id="comment_body_1991542" class="blog_comment_body">做淘宝抢拍器时用的是HtmlAgilityPack，一会换你这个试试。验证码啊验证码</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;非空&quot;,1991542,&quot;say9vGz+ngKbdMdLpTGryqq6BXrE747j4ZHim3pEfYQcAqg22wW0tw==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991542,&quot;say9vGz+ngKbdMdLpTGryqq6BXrE747j4ZHim3pEfYQcAqg22wW0tw==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e9%9d%9e%e7%a9%ba" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_2" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl02$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_2" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991566">#4楼</a><a name="1991566" id="comment_anchor_1991566"></a></cite> <a id="Comments1_CommentList_NameLink_3" href="http://www.cnblogs.com/leleroyn/" target="_blank">Ants</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ants" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 20:01</small>
			</h5>
			<span id="comment_body_1991566" class="blog_comment_body">不知道性能怎样,类似这种模板编程,我觉得NVELOCITY好像更灵活点.<br/>页面处理逻辑硬编码在代码里,也不太好吧. 纯个人意见.呵呵</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ants&quot;,1991566,&quot;M+rVtY5KL0e9ucLSz1MtAHZIYGzwSJ10P0M+XUlIn+XicOLJqlMx6Q==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991566,&quot;M+rVtY5KL0e9ucLSz1MtAHZIYGzwSJ10P0M+XUlIn+XicOLJqlMx6Q==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ants" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_3" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl03$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_3" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991572">#5楼</a><a name="1991572" id="comment_anchor_1991572"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_4" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 20:10</small>
			</h5>
			<span id="comment_body_1991572" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991530" title="查看引用原文">引用</a></legend>辰：<br/>hoho。看了一下，原来换了个名字。<br/>之前是服务端的dom选择器，如果有dom这个说法。<br/><br/>建议一下，开篇第一句话我看了半天没有明白这个框架是干嘛的，到最后看了例子才明白。<br/>能再提炼下，新手就入门很快了。<br/></fieldset><br/><br/><br/>看来开篇第一句话的确是很重要啊，，，，</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991572,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991572,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_4" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl04$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_4" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991574">#6楼</a><a name="1991574" id="comment_anchor_1991574"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_5" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 20:11</small>
			</h5>
			<span id="comment_body_1991574" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991542" title="查看引用原文">引用</a></legend>非空：做淘宝抢拍器时用的是HtmlAgilityPack，一会换你这个试试。验证码啊验证码</fieldset><br/><br/>有任何问题可以随时问我。我想你会喜欢Jumony为HtmlAgilityPack增加的选择器支持的。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991574,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991574,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_5" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl05$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_5" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991577">#7楼</a><a name="1991577" id="comment_anchor_1991577"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_6" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 20:12</small>
			</h5>
			<span id="comment_body_1991577" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991566" title="查看引用原文">引用</a></legend>Ants：<br/>不知道性能怎样,类似这种模板编程,我觉得NVELOCITY好像更灵活点.<br/>页面处理逻辑硬编码在代码里,也不太好吧. 纯个人意见.呵呵</fieldset><br/><br/>hoho，更灵活？那我以后给一个NVelocity无论如何也做不出来的例子吧。从原理上来说，NVelocity只需要识别字符串里面的特殊标签即可，而Jumony要读懂整个HTML（建立DOM模型），所以在性能上我不奢望Jumony能比模版引擎快。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991577,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991577,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_6" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl06$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_6" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991598">#8楼</a><a name="1991598" id="comment_anchor_1991598"></a></cite> <a id="Comments1_CommentList_NameLink_7" href="http://www.cnblogs.com/Microred/" target="_blank">一抹红</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e4%b8%80%e6%8a%b9%e7%ba%a2" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 20:45</small>
			</h5>
			<span id="comment_body_1991598" class="blog_comment_body">期待后文，很好很强大，希望lz多讲解下服务器端操作dom的交互，数据绑定，异步交互等等！！！</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;一抹红&quot;,1991598,&quot;UgLJKJeFpMkVSzArRXvAFFQRj+ytWWeN7emlvaTugGI1HIqEzB4QzQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991598,&quot;UgLJKJeFpMkVSzArRXvAFFQRj+ytWWeN7emlvaTugGI1HIqEzB4QzQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e4%b8%80%e6%8a%b9%e7%ba%a2" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_7" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl07$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_7" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991600">#9楼</a><a name="1991600" id="comment_anchor_1991600"></a></cite> <a id="Comments1_CommentList_NameLink_8" href="http://www.cnblogs.com/Microred/" target="_blank">一抹红</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e4%b8%80%e6%8a%b9%e7%ba%a2" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 20:47</small>
			</h5>
			<span id="comment_body_1991600" class="blog_comment_body">最后想了一下，如果在服务器端操作html,那么跟aspx,mvc相比，性能又会如何了，期待中。。。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;一抹红&quot;,1991600,&quot;UgLJKJeFpMkVSzArRXvAFFQRj+ytWWeN7emlvaTugGI1HIqEzB4QzQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991600,&quot;UgLJKJeFpMkVSzArRXvAFFQRj+ytWWeN7emlvaTugGI1HIqEzB4QzQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e4%b8%80%e6%8a%b9%e7%ba%a2" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_8" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl08$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_8" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991637">#10楼</a><a name="1991637" id="comment_anchor_1991637"></a></cite> <a id="Comments1_CommentList_NameLink_9" href="http://www.cnblogs.com/sun391/" target="_blank">TAOTAO.</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/TAOTAO." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 21:23</small>
			</h5>
			<span id="comment_body_1991637" class="blog_comment_body">性能绝对是毒药啊&#183;&#183;&#183;&#183;<br/>话说操作DOM这种事情放在服务器端的话，访问量一大肯定不行的<br/><br/>另外它纯粹的只是操作HTML文本，也不涉及到多浏览器兼容的问题，<br/>万一它实现的DOM解析器和浏览器行为不一样，肯定会得到非预期的效果。<br/><br/>我只是站在前端人员的方面看待这个，也许不太客观，见谅！</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;TAOTAO.&quot;,1991637,&quot;XnuyTaLyPnbZ8fywMfe8jjqd8OM3RPwy18crr6uqU6c1JEqUdJlv/A==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991637,&quot;XnuyTaLyPnbZ8fywMfe8jjqd8OM3RPwy18crr6uqU6c1JEqUdJlv/A==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=TAOTAO." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_9" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl09$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_9" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991680">#11楼</a><a name="1991680" id="comment_anchor_1991680"></a></cite> <a id="Comments1_CommentList_NameLink_10" href="http://www.cnblogs.com/Demo/" target="_blank">月光下的凤尾族</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e6%9c%88%e5%85%89%e4%b8%8b%e7%9a%84%e5%87%a4%e5%b0%be%e6%97%8f" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 21:57</small>
			</h5>
			<span id="comment_body_1991680" class="blog_comment_body">很好很强大，学习了。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;月光下的凤尾族&quot;,1991680,&quot;JOnK/wbBM2PCh5kEox2SgmYp4xUmnCd93jZb6IzR3Ch1ItvE0l2Keg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991680,&quot;JOnK/wbBM2PCh5kEox2SgmYp4xUmnCd93jZb6IzR3Ch1ItvE0l2Keg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e6%9c%88%e5%85%89%e4%b8%8b%e7%9a%84%e5%87%a4%e5%b0%be%e6%97%8f" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_10" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl10$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_10" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991692">#12楼</a><a name="1991692" id="comment_anchor_1991692"></a></cite> <a id="Comments1_CommentList_NameLink_11" href="http://www.cnblogs.com/hjf1223/" target="_blank">阿不</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e9%98%bf%e4%b8%8d" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 22:12</small>
			</h5>
			<span id="comment_body_1991692" class="blog_comment_body">有点意思了，在服务器直接输出HTML。<br/>但是最后一点我没看明白，你是说HTML Source看到的仍然是原始的HTML，但是显示的值是你服务器端重新设置的值是吗？通过JS控制显示，还是？</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;阿不&quot;,1991692,&quot;BqhhGCSxB9O/5u1ynpky03rSk8BU+Y3c3bQ4sJEtwJUF1DJvYPzsIw==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991692,&quot;BqhhGCSxB9O/5u1ynpky03rSk8BU+Y3c3bQ4sJEtwJUF1DJvYPzsIw==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e9%98%bf%e4%b8%8d" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_11" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl11$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_11" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991726">#13楼</a><a name="1991726" id="comment_anchor_1991726"></a></cite> <a id="Comments1_CommentList_NameLink_12" href="http://www.cnblogs.com/loning/" target="_blank">Loning</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Loning" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 23:10</small>
			</h5>
			<span id="comment_body_1991726" class="blog_comment_body">我真得很担心这个的效率，毕竟标签的位置本来基本上可以在编译时确定的。但是我们用DOM，就把这个事情推迟到运行时来进行了。<br/>而且DOM的效率也是一个让人担忧的问题，毕竟他会分析整个页面，占用内存把标签分析出来，做成一个树状的结构。<br/>jQuery之所以成功，我认为很大程度上是因为这个事情被放在客户端了，但是如果要让服务端持续做这个事情的话，对于MVC来说，View层的代码标签位置最好在编译时就能确定下来。<br/>当然，这些事情只是在感觉上是这样的，我也并没有做过相关测试。。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Loning&quot;,1991726,&quot;7TISsIw9CIXL9gqYxmBBHJYFooj/Xx9vuCv0I9C8gGlVtqs5oLNTOA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991726,&quot;7TISsIw9CIXL9gqYxmBBHJYFooj/Xx9vuCv0I9C8gGlVtqs5oLNTOA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Loning" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_12" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl12$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_12" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991734">#14楼</a><a name="1991734" id="comment_anchor_1991734"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_13" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 23:31</small>
			</h5>
			<span id="comment_body_1991734" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991637" title="查看引用原文">引用</a></legend>TAOTAO.：<br/>性能绝对是毒药啊&#183;&#183;&#183;&#183;<br/>话说操作DOM这种事情放在服务器端的话，访问量一大肯定不行的<br/><br/>另外它纯粹的只是操作HTML文本，也不涉及到多浏览器兼容的问题，<br/>万一它实现的DOM解析器和浏览器行为不一样，肯定会得到非预期的效果。<br/><br/>我只是站在前端人员的方面看待这个，也许不太客观，见谅！</fieldset><br/><br/><br/>怎么说，可以说性能在可接受范围内。或者我是这么想的，只要方向是对的，<b>性能问题并不是完全不能解决的</b>。我不否认这是一个疯狂的想法，性能在很长一段时间内可能都会是它的软肋，但很多时候OutputCache可以掩盖掉很多性能问题。<br/><br/>嗯，就是这样，其实对于大吞吐量而言，OutputCache可以说是必须的。而且，其实WebServer并不贵，也非常容易集群，无论怎样将来的趋势都会是机器比人贵。所以前途还是光明的。<br/><br/>在下一个版本中，静态HTML文件的DOM会被编译缓存，这使得创建DOM的时间快了13倍（用www.qq.com在我的电脑上测试）。我觉得，可以有一拼了。<br/><br/><br/>至于您说的和浏览器行为不一致的问题，嗯，这个正好与我现在所做的一些工作有关系，展开来谈谈。<br/><br/>浏览器是多种多样的，所以不可能有一种行为与所有浏览器是一致的。我只可能模拟出标准浏览器的行为，但这绝大多数情况下也够用了。麻烦的是HTML的输入可能存在各种各样的问题，当然，理想情况下，如果所有的HTML都是XHTML规范的，那我们也用不着HTML Parser了，直接用XML Parser不就行了么？所以这些脏活是必须的，但也并非没有规则。<br/><br/>在现在这个版本的Jumony Parser中，绝大多数的行为都是严格遵循HTML 4.01规范的，我甚至写了很多代码来硬编码HTML的一些规则，例如可选结束标签（即像&lt;p&gt;这种可结束可不结束的标签），这也是Jumony Parser在可选结束标签支持上上远胜于HtmlAgilityPack的原因。当然这些数据都不如实测来的有说服力，所以Jumony Parser经常会直接拿互联网上的页面来做测试。譬如说我之前发布的园林空气净化器，就是一个很好的例子，其处理的不是W3C的规范页面也不是我在家敲出来的东西，而是博客园的页面。绝大多数情况下它工作的很完美。<br/><br/>在未来版本的Jumony Parser中，我意识到单一的HTML Parser事实上是不可能应付任何HTML页面的，包括HTML标准也在不断更新，HTML5的草案已经有浏览器支持。或者，你会希望在页面上增加一些自己定义的标签，然后对其进行处理。所以Jumony Parser在未来版本中将会分成三个部分，读取HTML，识别标签、文本、代码和注释这四种内容元素的读取器（Jumony Parser Reader），将这些内容元素按照某种HTML规范构建DOM模型的构建器（Jumony Parser Builder），以及最后创建实际的DOM对象的DOM提供程序（Jumony DOM Provider）。<br/><br/>通过重写Builder，可以让你建立任何HTML规范或是处理兼容行为，重写DOM Provider则可以让你创建个性化的DOM模型。你可能会想，我应该把&lt;table&gt;直接创建为Table类型的对象，岂不更好。<br/><br/><br/>除此之外，您还可以任意更换任何您喜欢的Parser来建立DOM模型，Jumony对HTML DOM模型只定义了最低限度要求的接口，绝大多数操作都是通过Jumony的扩展方法来实现的，这使得不同Parser和DOM之间的差异被隐藏。比如说，现在Jumony上就有两套DOM和Parser，HTMLAgilityPack的，和Jumony Parser的。我可以用HTMLAgilityPack来分析新浪的页面，再用Jumony Parser来分析网易的页面，然后还可以在这两个DOM对象完全不同的文档之间转移和拷贝节点。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991734,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991734,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_13" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl13$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_13" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991737">#15楼</a><a name="1991737" id="comment_anchor_1991737"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_14" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 23:34</small>
			</h5>
			<span id="comment_body_1991737" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991692" title="查看引用原文">引用</a></legend>阿不：<br/>有点意思了，在服务器直接输出HTML。<br/>但是最后一点我没看明白，你是说HTML Source看到的仍然是原始的HTML，但是显示的值是你服务器端重新设置的值是吗？通过JS控制显示，还是？</fieldset><br/><br/><br/>文章的描述可能有点不清楚让人误会，我已经改了，您再看看。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991737,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991737,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_14" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl14$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_14" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991748">#16楼</a><a name="1991748" id="comment_anchor_1991748"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_15" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-19 23:55</small>
			</h5>
			<span id="comment_body_1991748" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991726" title="查看引用原文">引用</a></legend>Loning：<br/>我真得很担心这个的效率，毕竟标签的位置本来基本上可以在编译时确定的。但是我们用DOM，就把这个事情推迟到运行时来进行了。<br/>而且DOM的效率也是一个让人担忧的问题，毕竟他会分析整个页面，占用内存把标签分析出来，做成一个树状的结构。<br/>jQuery之所以成功，我认为很大程度上是因为这个事情被放在客户端了，但是如果要让服务端持续做这个事情的话，对于MVC来说，View层的代码标签位置最好在编译时就能确定下来。<br/>当然，这些事情只是在感觉上是这样的，我也并没有做过相关测试。。</fieldset><br/><br/><br/>分析页面的过程，在下个版本的Jumony中，对于静态页面会编译缓存。的确提高了不少性能。<br/><br/>但无论怎样，对于复杂页面而言，创建这么多对象以及在上面Find什么的，它不可能是一个很低资源占用的事情。编译创建DOM的过程后，其性能只提高了13倍，在这个工作上，性能瓶颈已经完全卡在CLR创建对象的效率上了。<br/><br/>不过担心归担心，我也很担心，从做它的第一天开始。最终的结果怎么说，算是可以接受的范围吧。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991748,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991748,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_15" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl15$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_15" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991851">#17楼</a><a name="1991851" id="comment_anchor_1991851"></a></cite> <a id="Comments1_CommentList_NameLink_16" href="http://www.cnblogs.com/tsoukw/" target="_blank">Kevin Zou</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Kevin+Zou" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 09:09</small>
			</h5>
			<span id="comment_body_1991851" class="blog_comment_body">真不好意思，還沒明白這東西有什么用<br/>如果是一個服務端的jquery，那在客戶端動一下的代價比較大。如果只是一個選擇器，感覺又沒有webform的對象模型來得強大。還是一個類似MVC一樣的模板引擎？</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Kevin Zou&quot;,1991851,&quot;XwzMApyn55G1WdqCvoAwlXfuxX8iiwiMvgvAHtePsdvV7f8nqNybFQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991851,&quot;XwzMApyn55G1WdqCvoAwlXfuxX8iiwiMvgvAHtePsdvV7f8nqNybFQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Kevin+Zou" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_16" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl16$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_16" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991895">#18楼</a><a name="1991895" id="comment_anchor_1991895"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_17" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 09:46</small>
			</h5>
			<span id="comment_body_1991895" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991851" title="查看引用原文">引用</a></legend>Kevin Zou：<br/>真不好意思，還沒明白這東西有什么用<br/>如果是一個服務端的jquery，那在客戶端動一下的代價比較大。如果只是一個選擇器，感覺又沒有webform的對象模型來得強大。還是一個類似MVC一樣的模板引擎？</fieldset><br/><br/>问题的关键在于，很多很多事情，在客户端是非常难以实现的。比如说加密解密，比如说访问数据库，比如说转换URL，等等等等。。。我想，大多数人可能都曾有过这样的感慨，这个事情要是用C#（服务器端）来做，就简单多了。Jumony将客户端的环境整个搬到服务器端来，从而使得以前在客户端做没类库，在服务器端做没环境的麻烦事儿都变得轻而易举。<br/><br/><br/>再来探讨WebForm，首先我不知道WebForm究竟强大在哪里，而事实上他的强大正是大家抛弃它的原因不是么。WebForm试图构建一套高度抽象的控件模型，然后从这个模型来生成HTML，造成的结果是程序员失去了HTML的掌控力。Jumony的思想源于WebForm但又与其完全相反。WebForm是定义抽象控件模型，生成HTML。而Jumony是理解HTML，再在这个的基础上来提供抽象接口。换言之WebForm是抽象 -&gt; HTML，Jumony是HTML -&gt; 抽象。也许你会认为这听起来更不靠谱，但事实上并非如此。<br/><br/>我们都知道服务器端的技术比客户端的技术更为强大，更容易搭建大型的框架，也有更多的框架支持。客户端的脚本语言在语言能力和灵活性上虽然比服务器端的静态语言要强大，但恰恰因为这样客户端几乎不可能搭建大型的框架，开发者的经验和解决方案也难以抽象提取和复用。<br/><br/>这意味着什么？这意味着，如果从抽象来生成HTML，也就是WebForm的方式，服务器端省事了，但客户端却陷入了困境。但客户端本来就抽象能力不足，而这时候服务器端还要抛出一个除了表现什么都没有的像一团乱麻一样的东西让客户端来处理。由于先天抽象能力不足，客户端根本无法从这些东西中分离出原本的数据和模型。结果就是我们的脚本常常无法复用，每个页面都必须有针对性的编写。这是非常糟糕的。这也是现在大家都倾向于采用服务器端数据采用JSON传递而不是直接生成HTML的缘故。<br/><br/>但不直接生成HTML，搜索引擎友好又如何保证呢？<br/><br/>但一旦将问题反过来思考，就发现其实很简单。服务器端从语言到类库，都是相当强大的OO模型，其抽象能力是客户端的许多倍。jQuery的作者写选择器花了多少时间我不知道。我知道我肯定不会比他聪明很多倍，但在服务器端实现一个CSS选择器，依托正则表达式和LINQ，看起来是比他要轻松很多的。<br/><br/>从具体到抽象的转换，绝对是比抽象到具体的转换要费力的。既然我们不可能避免要这种转换的话，那当然服务器端是最佳选择。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991895,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991895,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_17" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl17$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_17" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991902">#19楼</a><a name="1991902" id="comment_anchor_1991902"></a></cite> <a id="Comments1_CommentList_NameLink_18" href="http://www.cnblogs.com/gongji/" target="_blank">gongji</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/gongji" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 09:49</small>
			</h5>
			<span id="comment_body_1991902" class="blog_comment_body">用来做spider, 网站小偷正合适！</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;gongji&quot;,1991902,&quot;4f+ysA9nqoBW7vUfgHTrNYjghPf9DwVjXY7DMkcgdiGUzwBgbdThaA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991902,&quot;4f+ysA9nqoBW7vUfgHTrNYjghPf9DwVjXY7DMkcgdiGUzwBgbdThaA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=gongji" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_18" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl18$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_18" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991909">#20楼</a><a name="1991909" id="comment_anchor_1991909"></a></cite> <a id="Comments1_CommentList_NameLink_19" href="http://www.cnblogs.com/gongji/" target="_blank">gongji</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/gongji" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 09:51</small>
			</h5>
			<span id="comment_body_1991909" class="blog_comment_body">还有，可以用来实现.net版本的zk,www.zkoss.org</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;gongji&quot;,1991909,&quot;4f+ysA9nqoBW7vUfgHTrNYjghPf9DwVjXY7DMkcgdiGUzwBgbdThaA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991909,&quot;4f+ysA9nqoBW7vUfgHTrNYjghPf9DwVjXY7DMkcgdiGUzwBgbdThaA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=gongji" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_19" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl19$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_19" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991921">#21楼</a><a name="1991921" id="comment_anchor_1991921"></a></cite> <a id="Comments1_CommentList_NameLink_20" href="http://www.cnblogs.com/sun391/" target="_blank">TAOTAO.</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/TAOTAO." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 09:54</small>
			</h5>
			<span id="comment_body_1991921" class="blog_comment_body"><a href="#1991734" title="查看所回复的评论">@</a>Ivony...<br/>另外有一点还是不大清楚，这个的主要是应用在哪方面呢？<br/>如果只是作为数据绑定，或者控制输出HTML的话，纯粹的模板引擎会比这个干得更好，但是如果加上一些ajax或者封装客户端事件等的功能，又和asp.net无异，感觉定位很不清晰啊&#183;&#183;  <br/><br/></span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;TAOTAO.&quot;,1991921,&quot;XnuyTaLyPnbZ8fywMfe8jjqd8OM3RPwy18crr6uqU6c1JEqUdJlv/A==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991921,&quot;XnuyTaLyPnbZ8fywMfe8jjqd8OM3RPwy18crr6uqU6c1JEqUdJlv/A==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=TAOTAO." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_20" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl20$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_20" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1991971">#22楼</a><a name="1991971" id="comment_anchor_1991971"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_21" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 10:25</small>
			</h5>
			<span id="comment_body_1991971" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1991921" title="查看引用原文">引用</a></legend>TAOTAO.：<br/>@Ivony...<br/>另外有一点还是不大清楚，这个的主要是应用在哪方面呢？<br/>如果只是作为数据绑定，或者控制输出HTML的话，纯粹的模板引擎会比这个干得更好，但是如果加上一些ajax或者封装客户端事件等的功能，又和asp.net无异，感觉定位很不清晰啊&#183;&#183;  <br/><br/></fieldset><br/><br/><br/>首先我避开Jumony定位的问题，来谈谈您所列举的这些方案的劣势。<br/><br/>关于模板引擎，如果不顾及性能，Jumony本身就是一套基于HTML的优秀的模版引擎，您往HTML里面写点儿&lt;data&gt;什么的，在后面Find( &quot;data&quot; )再一处理不就轻松实现了？<br/><br/>Jumony可以将任意HTML当作模版来用，譬如说在我之前的文章中，拿老赵的博客，拿新浪的首页来做模版，完全不需要修改任何东西，直接用WebClient从互联网下载的HTML，就可以被注入数据。这是模板引擎无论如何也做不到的。<br/><br/>至于ASP.NET，Jumony无意取代ASP.NET，只是辅助解决其中一部分不好解决的问题而已。<br/><br/><br/>至于定位的问题。<br/><br/>我想这样来解答比较合适。<br/><br/>首先Jumony不是一个应用，而是一个框架。很多时候很多人都问我，这玩意儿能干什么。但我想其实最好的方式是问问自己，你想干什么。我想其实jQuery也很难解答这个我能干什么的问题吧。jQuery实现的那些动画与其说是其亮点不如说是噱头。jQuery<b>自身</b>既不能绑定数据，也不能搞省市联动下拉菜单。<br/><br/>当然这并没有回答问题，作为框架而言，也应该有自己的定位才是。但事实上，还真不好回答。在Milestone 1中，也许我们可以清晰的看到Jumony的定位，一个基于ASP.NET的HTML引擎。<br/><br/>或者这么说，如果纠结于Jumony的定位，其实是陷入了一个误区。Jumony不是一整套完整的解决所有问题的解决方案。而是解决一部分很麻烦的问题的解决方案。在后面的例子中，我会谈到Jumony与现有技术的衔接都是无缝的。你可以用XXX技术解决大部分问题，然后一小部分很麻烦棘手的事情，交给Jumony来解决。<br/><br/><br/><br/>可是当M1发布之后，我发现这玩意儿完全不仅仅是可以做点网页的，上面有人说了，可以用来偷网页。呃，，，尽管我并不支持，但事实上作为建立在HTML DOM上的框架，我们可以作出很多很多好玩的应用，例如自动格式化HTML等。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1991971,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1991971,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_21" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl21$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_21" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1992004">#23楼</a><a name="1992004" id="comment_anchor_1992004"></a></cite> <a id="Comments1_CommentList_NameLink_22" href="http://www.cnblogs.com/Demo/" target="_blank">月光下的凤尾族</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e6%9c%88%e5%85%89%e4%b8%8b%e7%9a%84%e5%87%a4%e5%b0%be%e6%97%8f" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 10:43</small>
			</h5>
			<span id="comment_body_1992004" class="blog_comment_body">其实这个东西,这么说吧,JQuery做的SEO不好,而且会在页面生成大堆JavaScript.<br/>那么既想用JQuery,又想SEO好,又不想生成除Html外的JavaScript,这就是Jumony要做的了.<br/>我认为光这一点,Jumony就有很大的价值,如果把它做成一个Html解析器,反而是偏离航向了.</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;月光下的凤尾族&quot;,1992004,&quot;JOnK/wbBM2PCh5kEox2SgmYp4xUmnCd93jZb6IzR3Ch1ItvE0l2Keg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1992004,&quot;JOnK/wbBM2PCh5kEox2SgmYp4xUmnCd93jZb6IzR3Ch1ItvE0l2Keg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e6%9c%88%e5%85%89%e4%b8%8b%e7%9a%84%e5%87%a4%e5%b0%be%e6%97%8f" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_22" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl22$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_22" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1992009">#24楼</a><a name="1992009" id="comment_anchor_1992009"></a></cite> <a id="Comments1_CommentList_NameLink_23" rel="nofllow" href="http://home.cnblogs.com/u/140753/" target="_blank">盗奶的夜猫</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e7%9b%97%e5%a5%b6%e7%9a%84%e5%a4%9c%e7%8c%ab" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 10:47</small>
			</h5>
			<span id="comment_body_1992009" class="blog_comment_body">基本还是清楚的，可能是楼主没有说出要实现的最终目标，而大家又被众多杂乱的框架搞晕了，第一个例子仅仅是帮助大家入门，看上去和其他的类似，相信以后的介绍才能的体现出真正的不同和特性！<br/>支持楼主坚持写下去，百花齐放、百家争鸣！</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;盗奶的夜猫&quot;,1992009,&quot;TjkclDO5Upv4hPyMEVYjYVzdhyXiT+28uUIvSgkCK8AP0it3K0W78w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1992009,&quot;TjkclDO5Upv4hPyMEVYjYVzdhyXiT+28uUIvSgkCK8AP0it3K0W78w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e7%9b%97%e5%a5%b6%e7%9a%84%e5%a4%9c%e7%8c%ab" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_23" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl23$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_23" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1992010">#25楼</a><a name="1992010" id="comment_anchor_1992010"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_24" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 10:47</small>
			</h5>
			<span id="comment_body_1992010" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1992004" title="查看引用原文">引用</a></legend>月光下的凤尾族：<br/>其实这个东西,这么说吧,JQuery做的SEO不好,而且会在页面生成大堆JavaScript.<br/>那么既想用JQuery,又想SEO好,又不想生成除Html外的JavaScript,这就是Jumony要做的了.<br/>我认为光这一点,Jumony就有很大的价值,如果把它做成一个Html解析器,反而是偏离航向了.</fieldset><br/><br/><br/>两手抓，两手都不落空。<br/><br/>有人说我想用它来分析页面捣鼓数据，我总不能说不行，Jumony没打算干这个，你用别的吧。Jumony之所以分这么多DLL也是为了各自发展，互不干扰。还好现在都没超出我的掌控范围，我一般想到一个很酷的idea就会去做，而不会被教条的定位所羁绊，也不喜欢这样。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1992010,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1992010,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_24" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl24$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_24" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1992017">#26楼</a><a name="1992017" id="comment_anchor_1992017"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_25" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 10:51</small>
			</h5>
			<span id="comment_body_1992017" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1992009" title="查看引用原文">引用</a></legend>盗奶的夜猫：<br/>基本还是清楚的，可能是楼主没有说出要实现的最终目标，而大家又被众多杂乱的框架搞晕了，第一个例子仅仅是帮助大家入门，看上去和其他的类似，相信以后的介绍才能的体现出真正的不同和特性！<br/>支持楼主坚持写下去，百花齐放、百家争鸣！</fieldset><br/><br/><br/>是啊，众口难调，因为有人在Jumony群里面说Jumony缺乏最简单的入门例子，所以我写了这个。嗯，以后分两个系列写，一路是Jumony前瞻，专门说那些酷酷的特性，一路是Jumony入门，专门说大家怎么才能很快的玩上手。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1992017,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1992017,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_25" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl25$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_25" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1992036">#27楼</a><a name="1992036" id="comment_anchor_1992036"></a></cite> <a id="Comments1_CommentList_NameLink_26" href="http://www.cnblogs.com/ChenShuHan/" target="_blank">testzhangsan</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/testzhangsan" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 11:00</small>
			</h5>
			<span id="comment_body_1992036" class="blog_comment_body">想法很不错！支持这种创新精神！请楼主回答我的质疑：<br/><br/>1》如果一个页面的Dom非常大，有N屏，Dom也非常复杂，一下子加载到服务器的内存，是不是有点吃不消。<br/><br/>2》如果在服务器端缓存了这些Dom，那么前台人员修改了页面，比如把Div移动到别的Div下，是不是缓存自动过期？用的是缓存依赖？<br/><br/>3》对后台开发人员来说，是不可见的代码。比如要在一个嵌套了N个Div下循环&lt;ul&gt;，又嵌套循环&lt;li&gt;，那么handler里面的代码是不是很复杂了，又不可见。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;testzhangsan&quot;,1992036,&quot;8Qn4j9oFlLi1IGiunFxFNACsLwhK0Sm4uSL6TEsoH+XQH/TZeWfAHQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1992036,&quot;8Qn4j9oFlLi1IGiunFxFNACsLwhK0Sm4uSL6TEsoH+XQH/TZeWfAHQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=testzhangsan" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_26" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl26$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_26" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1992052">#28楼</a><a name="1992052" id="comment_anchor_1992052"></a>[<span class="louzhu">楼主</span>]</cite> <a id="Comments1_CommentList_NameLink_27" href="http://www.cnblogs.com/Ivony/" target="_blank">Ivony...</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Ivony..." title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 11:17</small>
			</h5>
			<span id="comment_body_1992052" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1992036" title="查看引用原文">引用</a></legend>testzhangsan：<br/>想法很不错！支持这种创新精神！请楼主回答我的质疑：<br/><br/>1》如果一个页面的Dom非常大，有N屏，Dom也非常复杂，一下子加载到服务器的内存，是不是有点吃不消。<br/><br/>2》如果在服务器端缓存了这些Dom，那么前台人员修改了页面，比如把Div移动到别的Div下，是不是缓存自动过期？用的是缓存依赖？<br/><br/>3》对后台开发人员来说，是不可见的代码。比如要在一个嵌套了N个Div下循环&lt;ul&gt;，又嵌套循环&lt;li&gt;，那么handler里面的代码是不是很复杂了，又不可见。</fieldset><br/><br/><br/>1、其他的DOM Object我不知道，但Jumony Parser分析的DOM Object中，只包含最基本的HTML的信息，譬如说TextNode里面只有一个字符串字段就是所包含的HTML文本，Element则只有一个name和一个attributes（这是一个Dictionary）。所以理论上来说，DOM在内存中的大小会比HTML文本大一些（因为有CLR的其他信息存在，如虚方法表、头之类），但也大不了多少。我们很难想象会有一个1M的HTML页面吧，所以在内存中的DOM也大不到哪去了。<br/><br/>2、有文件缓存依赖项，和ASP.NET的机制是一样的，所以不用担心。只要文件被修改，缓存马上会失效。<br/><br/>3、代码不会复杂，事实上选择器和服务器端的LINQ技术都可以简化问题。这个在以后会谈到。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;Ivony...&quot;,1992052,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1992052,&quot;QIfmn2VAQC6L9aaG/ZY1rpX5le6OShn0cj2iC2NAoE4np9dRng9u8w==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Ivony..." target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_27" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl27$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_27" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1992171">#29楼</a><a name="1992171" id="comment_anchor_1992171"></a></cite> <a id="Comments1_CommentList_NameLink_28" href="http://www.cnblogs.com/flowforever/" target="_blank">flowforever</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/flowforever" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-20 12:44</small>
			</h5>
			<span id="comment_body_1992171" class="blog_comment_body">我这样理解的<br/>这个Jumony干的事情就跟MVC差不多。<br/>你需要定义一个Template。<br/>Template上面可以用跟jQuery类似的选择器查找到对应的位置。然后你可以在这些位置上面插入数据。然后端程序员有更大的自由操作DOM。</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;flowforever&quot;,1992171,&quot;OIP9TBSAuUM/1OEnubRvKp1veXdfQI/H9rK5i4n4YGyRAwuNMTxcRA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1992171,&quot;OIP9TBSAuUM/1OEnubRvKp1veXdfQI/H9rK5i4n4YGyRAwuNMTxcRA==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=flowforever" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_28" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl28$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_28" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#1997248">#30楼</a><a name="1997248" id="comment_anchor_1997248"></a></cite> <a id="Comments1_CommentList_NameLink_29" href="http://www.cnblogs.com/chenleinet/" target="_blank">chenleinet</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/chenleinet" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2010-12-25 21:06</small>
			</h5>
			<span id="comment_body_1997248" class="blog_comment_body">这个玩意不错的，至于效率问题，其实我觉得，可以用缓存解决一下</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;chenleinet&quot;,1997248,&quot;OKEoylmM0jGIAOT+PgykRV26IoD1i0tsuSyav6s381NswwuPyqmRzg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(1997248,&quot;OKEoylmM0jGIAOT+PgykRV26IoD1i0tsuSyav6s381NswwuPyqmRzg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=chenleinet" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_29" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl29$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_29" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#2027395">#31楼</a><a name="2027395" id="comment_anchor_2027395"></a></cite> <a id="Comments1_CommentList_NameLink_30" href="http://www.cnblogs.com/yinyao/" target="_blank">妖*小夜</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e5%a6%96*%e5%b0%8f%e5%a4%9c" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2011-02-16 14:43</small>
			</h5>
			<span id="comment_body_2027395" class="blog_comment_body">mark:-)</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;妖*小夜&quot;,2027395,&quot;bJ/kx5Y7oEpV7S0TCwWnbfjkJqF4qkzgOaNjWEv8rQbV3rRwXWEpVg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(2027395,&quot;bJ/kx5Y7oEpV7S0TCwWnbfjkJqF4qkzgOaNjWEv8rQbV3rRwXWEpVg==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e5%a6%96*%e5%b0%8f%e5%a4%9c" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_30" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl30$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_30" CausesValidation="False"></a></div>
		</li>
	
		<li class="alt">
			<h5>
				<cite><a href="#2029614">#32楼</a><a name="2029614" id="comment_anchor_2029614"></a><a name="Post"></a></cite> <a id="Comments1_CommentList_NameLink_31" href="http://www.cnblogs.com/msg7086/" target="_blank">MeteorRain</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/MeteorRain" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a><small>2011-02-20 06:13</small>
			</h5>
			<span id="comment_body_2029614" class="blog_comment_body">LINQBridge神器</span>
			<div class="opt_comment">　<a onclick="ReplyComment(&quot;MeteorRain&quot;,2029614,&quot;MVMncbdGXHGrfaGd5zhQab7Hf56xTm/iVsikfzUUinEfsLDn9UW9kQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">回复</a>　<a onclick="QuoteComment(2029614,&quot;MVMncbdGXHGrfaGd5zhQab7Hf56xTm/iVsikfzUUinEfsLDn9UW9kQ==&quot;)" href="/Ivony/archive/2010/12/19/jumony-guide-1.html#commentform">引用</a>　<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=MeteorRain" target="_blank">查看</a>　<a id="Comments1_CommentList_DeleteLink_31" href="javascript:__doPostBack(&#39;Comments1$CommentList$ctl31$DeleteLink&#39;,&#39;&#39;)"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_EditLink_31" CausesValidation="False"></a></div>
		</li>
	
</ol>

<script language="javascript" type="text/javascript">
    var m = window.__blog.commentListRendered;
    if (m) { m(__$("commentList")); }
</script>
<script type="text/javascript">
    var commentAuthorHasChecked = false;
    var commentAuthorIsValid = false;
    var commentUrlIsValid = true;
    var commentEmailIsValid = true;
    var authenCodeHasChecked = false;
    var authenCodeIsValid = true;
    var hasLogined = false;
    
    function PostComment() {    
        
        var isValid = true;
        
        if($("#wrapAuthenCode").css("display")=="none"){
            ShowAuthenCode();
            $("#tip_AuthenCode").css("color","red");
            $("#tip_AuthenCode").html("请输入验证码！");
            isValid = false;
        }
        
        if(!hasLogined && !commentAuthorHasChecked){
            CheckAuthor();        
        }                
        if(!hasLogined && !commentAuthorIsValid){
            isValid = false;
        }
                       
        if(!authenCodeHasChecked){
            CheckAuthenCode();            
        }
        if(!authenCodeIsValid){
            isValid = false;
        }
        
        if(!hasLogined && !commentUrlIsValid){            
            isValid = false;
        }        
        if(!commentEmailIsValid){            
            isValid = false;
        }        
        if(!CheckCommentContent()){
            isValid = false;
        }    
        if(!isValid){
            return;
        }

        var content = $("#tbCommentBody").val();
        if(content.length>2000){
            alert("评论内容过长！不允许发布！");
            return;
        }     
        
        if(content.indexOf("　Ｅ　　　　　　　　　Ｅ　　　　　　　　　　Ｅ　　　　　　")>=0){
            alert("该内容不允许布！");
            return;
        }   
        
       if ($("#span_comment_posted").html()!='' && $("#span_comment_posted").html()==content){
            alert("该评论已发表过!");
            return;
        }
        
        $("#tip_comment").html("评论提交中...");
        $("#span_comment_posted").html(content);
        //content = content.replace("'", "\\'");
        var email = $("#tbCommentEmail").val();
        var authenNum = $("#tbAuthenCode").val();
        var authenId = $("#span_comment_test").html();
        var comment = {};
        comment.authenNum = authenNum;
        comment.authenId= authenId;
        comment.parentId = 0;
        comment.blogId = 0;
        comment.sourceUrl = '';
        comment.author = $("#tbCommentAuthor").val();
        comment.url = $("#tbCommentAuthorUrl").val();
        comment.authenCode = $("#tbAuthenCode").val();
        comment.email = email;
        comment.title = '';
        comment.content = content;
        comment.parentCommentId = $("#span_parentcomment_id").html();
        $.ajax({
            url: '/ws/CommentService.asmx/AddAnonymousComment',
            data: $.toJSON(comment),
            type: "post",
            dataType: "json",
            contentType: "application/json; charset=utf8",
            success: function(data) {
               if (data.d["IsSuccess"]) {
                    ShowCommentMsg("感谢您的回复:)");
                    //RereshComments2(comment.parentId);
                    $("#tbCommentBody").val('');
                    //$("#divCommentShow").html(data.d["ReturnData"]+content.replace(/\n/g,"<br/>")+"<br/><br/>");
                    $("#divCommentShow").html($("#divCommentShow").html()+data.d["ReturnData"]); 
                    $("#tip_AuthenCode").html('');
                    RefreshAuthenCode();
                    $("#tbAuthenCode").val("");                    
                    CommentNotify(data.d["CommentID"]);
                }
                else {
                    ShowCommentMsg(data.d["ReturnData"]);//"抱歉！评论提交失败！请与管理员联系。");
                    $("#span_comment_posted").html(''); 
                }
            },
            error: function(xhr) {
                ShowCommentMsg("抱歉！评论提交失败！请与管理员联系。");
                $("#span_comment_posted").html('');  
                //alert(xhr.responseText);
            }
        }
        );
    }
    
    function RefreshAuthenCode(){
        AjaxPost("/ws/CommentService.asmx/RefreshAuthenCode","{}",RefreshImg); 
        $("#lnkRereshAuthenCode").html("<span style='color:red'>刷新中...</span>");
        return false;
    }
    
    function RefreshImg(response){
       $("#imgAuthenCode").attr("src","/Modules/CaptchaImage/ValidCodeImage.aspx?id="+encodeURIComponent(response));
       $("#span_comment_test").html(response);
       $("#lnkRereshAuthenCode").html("看不清，换一个");
    }
    
    function ShowAuthenCode(){
        //if($("#wrapAuthenCode").css("display")=="none"){    
        //    AjaxPost("/ws/CommentService.asmx/RefreshAuthenCode","{}",ShowAuthenCodeOk);
        //}
        $("#wrapAuthenCode").show();      
    }
    
    function ShowAuthenCodeOk(response){
         UpdateAuthenCode();
         $("#tbAuthenCode").val("");
         $("#wrapAuthenCode").show();
         $("#tip_AuthenCode").html('');
    }  
 
    
    function CheckAuthor(isOnblur){
        commentAuthorHasChecked = true;
        var maxLength = 30;
        if($("#tbCommentAuthor").val().length == 0){
            $("#tip_author").html("请输入您的昵称！");
            commentAuthorIsValid = false;
            return false;
        }     
        else if($("#tbCommentAuthor").val().length > maxLength){
            $("#tip_author").html("昵称不允许超过" + maxLength + "个字符！");
            commentAuthorIsValid = false;
            return false;
        }
        else{
            //if(isOnblur){
                AjaxPost("/ws/CommentService.asmx/IsAuthorExist","{author:'"+$("#tbCommentAuthor").val()+"'}" ,OnCheckAuthorExist);
            //}
            //else{
            //    $("#tip_author").html("");
            //    commentAuthorIsValid = true;
            //}
            return true;
        }
   }
   
    function OnCheckAuthorExist(response){        
        if(!response){
            $("#tip_author").html("");
            commentAuthorIsValid = true;
        }
        else{
            $("#tip_author").html("该昵称已被使用，请更换昵称");
            commentAuthorIsValid = false;
        }
   }
   
    function CheckUrl(){
        var maxLength = 50;
        var url = $("#tbCommentAuthorUrl").val();
        
        if(url.length == 0){
            commentUrlIsValid = true;
            return true;
        }
        else if(url.length > maxLength){
            $("#tip_url").html("主页地址不允许超过" + maxLength + "个字符！");
            commentUrlIsValid = false;
            return false;
        }
        else if(url.indexOf("http://")!=0 || url.indexOf(".") < 0){
            $("#tip_url").html("主页地址要以“http://”开头");
            commentUrlIsValid = false;
            return false;
        }
        else{
            $("#tip_url").html("");
            commentUrlIsValid = true;
            return true;
        }
   }
   
   function CheckEmail(){
        var email = $("#tbCommentEmail").val();
        if(email.length>0){
            var regExp = new RegExp("\\w+@((\\w|\-)+\\.)+[a-z]{2,3}");
            if(!regExp.test(email)){
                $("#tip_email").html("请输入正确的邮件地址!");
                commentEmailIsValid = false;
            }
            else{
                commentEmailIsValid = true;
                 $("#tip_email").html("");
            }
        }
        else{
            commentEmailIsValid = true;
            $("#tip_email").html("");  
        }
   }
   
   function CheckAuthenCode(){
        authenCodeHasChecked = true;
        var num = $("#tbAuthenCode").val();
        var id = $("#span_comment_test").html();
        $("#tip_AuthenCode").css("color","red");
        if(num.length==0){
             authenCodeIsValid = false;
             $("#tip_AuthenCode").html("请输入验证码！");
             return;
        }
        else if(num.length!=4){
            authenCodeIsValid = false;
            $("#tip_AuthenCode").html("请输入四位数字！");
             return;
        }
        else if(new RegExp("(\d+)").test(num)){
            authenCodeIsValid = false;
            $("#tip_AuthenCode").html("请输入四位数字！");
             return;
        }
        else{
            AjaxPost("/ws/CommentService.asmx/CheckAuthenCode","{number:"+num+",id:'"+id+"'}", OnCheckAuthenCode);
        }
   }
   
   function OnCheckAuthenCode(response){
        if(response){
            $("#tip_AuthenCode").css("color","green");
            $("#tip_AuthenCode").html("验证码输入正确！");
            authenCodeIsValid = true;            
        }
        else{
            $("#tip_AuthenCode").css("color","red");
            $("#tip_AuthenCode").html("验证码输错啦！");
            RefreshAuthenCode();
            authenCodeIsValid = false;           
        }
   }
   
   function CheckCommentContent(){
    if($("#tbCommentBody").val().length==0){
        alert("请输入评论内容！");
        return false;
    }
    return true;
   }
    
</script>
<div id="ctl06_comment_form" class="commentform">

<script type="text/javascript">
    try {
        SyntaxHighlighter.all();
        isSyntaxHighlighted = true;
    } catch (e) { }
</script>


<div id="ctl06_divLoginPannel">
<div class="login_tips">注册用户登录后才能发表评论，请 <a rel="nofollow" href="http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2fIvony%2farchive%2f2010%2f12%2f19%2fjumony-guide-1.html%3flogin%3d1%23commentform" class="underline">登录</a> 或 <a rel="nofollow" href="http://passport.cnblogs.com/register.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2fIvony%2farchive%2f2010%2f12%2f19%2fjumony-guide-1.html%23Bottom2" class="underline">注册</a>，<a href="http://www.cnblogs.com" target="_blank">返回博客园首页</a>。</div>
</div>

<div class="itnews c_ad_block">
<b>最新IT新闻</b>:<br />

          ·  <a href="http://news.cnblogs.com/n/93070/" target="_blank">视频：Larry 和 Sergey 在 1999</a><br />
	
          ·  <a href="http://news.cnblogs.com/n/93069/" target="_blank">50个值得收藏的有趣网站收罗</a><br />
	
          ·  <a href="http://news.cnblogs.com/n/93068/" target="_blank">谷歌更换Logo纪念动漫大师威尔埃斯纳诞辰</a><br />
	
          ·  <a href="http://news.cnblogs.com/n/93067/" target="_blank">网站推荐：11个相似图片搜索网站</a><br />
	
          ·  <a href="http://news.cnblogs.com/n/93066/" target="_blank">京东商城跟进补贴一代iPad用户差价</a><br />
	
&raquo; <a href="http://news.cnblogs.com/" title="IT新闻" target="_blank">更多新闻...</a>
</div>


<script type="text/javascript" src="http://partner.googleadservices.com/gampad/google_service.js"></script>
<script type="text/javascript">
    var c_enable_dfp = true;
    if (navigator.userAgent.indexOf("Chrome/6.0.401.1") > 0) {
        c_enable_dfp = false;
    }
    if (c_enable_dfp) {
        try {
            GS_googleAddAdSenseService("ca-pub-4210569241504288");
            GS_googleEnableAllServices();
        }
        catch (e) { }
    }
</script>
<script type="text/javascript">
    if (c_enable_dfp) {
        try {
            GA_googleAddSlot("ca-pub-4210569241504288", "cnblogs_blogpost_bottom");
            GA_googleAddSlot("ca-pub-4210569241504288", "cnblogs_blogpost_C2");
        }
        catch (e) { }
    }
</script>
<script type="text/javascript">
    if (c_enable_dfp) {
        try {
            GA_googleFetchAds();
        } catch (e) { }
    }
</script>
<div class="c_ad_block">
<script type="text/javascript">
    try {
        if (c_enable_dfp) {

            GA_googleFillSlot("cnblogs_blogpost_bottom");
        }
    }
    catch (e) { }
</script>
</div>
<div class="c_ad_block">
<script type="text/javascript">
    try {
        if (c_enable_dfp) {

            GA_googleFillSlot("cnblogs_blogpost_C2");
        }
    }
    catch (e) { }
</script>
</div>


<div class="itnews c_ad_block" id="kb_block">
<b>知识库最新文章</b>:<br />
<div id="kb_recent">

		<a href="http://kb.cnblogs.com/page/92564/" target="_blank">引入Flash那些事</a><br />
	
		<a href="http://kb.cnblogs.com/page/92663/" target="_blank">VS2010测试功能之旅：编码的UI测试（3）-操作对象的识别原理</a><br />
	
		<a href="http://kb.cnblogs.com/page/92563/" target="_blank">没有html、head、body的页面</a><br />
	
		<a href="http://kb.cnblogs.com/page/92666/" target="_blank">Javascript 变量作用域</a><br />
	
		<a href="http://kb.cnblogs.com/page/92671/" target="_blank">怎样编写精益和敏捷项目的合同</a><br />
	
</div>
&raquo; <a href="http://news.cnblogs.com/" target="_blank">更多知识库文章...</a>
</div>
<div id="HistoryToday" class="c_ad_block">
</div>
<script type="text/javascript">
    $(document).ready(function () {
        GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);
    });
</script>
<div id="site_nav_under" class="c_ad_block">
网站导航: <a href="http://www.cnblogs.com/" target="_blank">博客园首页</a> &nbsp;<a href="http://news.cnblogs.com/" target="_blank">IT新闻</a> &nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a> &nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a> &nbsp;<a href="http://job.cnblogs.com/" target="_blank">程序员招聘</a> &nbsp;<a href="http://home.cnblogs.com/q/" target="_blank">博问</a> 
</div>
<div id="ad_under_comment2" class="c_ad_block">
<a href="http://www.china-pub.com/static07/0908/zh_pod_090825.asp" target="_blank"><img src="http://static.cnblogs.com/images/a4/china-pub_pod.jpg" alt="" style="border:0px;"/></a><br />
<a href="http://www.china-pub.com/itbook/" target="_blank">China-pub 计算机图书网上专卖店！6.5万品种2-8折！</a><br />
<a href="http://www.china-pub.com/static07/0901/zh_jueba_090121.asp" target="_blank">China-Pub 计算机绝版图书按需印刷服务</a><br />
</div>
<div id="clear_reader_link">
<div id="kb_link">简洁版式：<a href="http://archive.cnblogs.com/a/1910698/">Jumony入门（一）从这里开始</a></div>
</div>





</div>


				
        </div>
        
	    <script language="javascript" type="text/javascript">
	               var m = window.__blog.contentRendered;
	               if (m) { m(__$("content")); }
        </script>

	    <div id="sidebar">
			    

<div id="about">
    <div>
        <h2 id="about_title">
            About
        </h2>
        <div id="about_body">
        <p>
  <h4 onclick="$(this).next('div').toggle();">Google Analytics隐私提示（请点击展开）</h4>
  <div style="display: none;">本博客已添加<a herf="http://www.google.com/analytics/">Google Analytics</a>代码，这将会收集您一些<b>非隐私</b>访问信息，这些信息包括您所查看的页面，所使用的浏览器等。所有收集的信息<b>均不包含可以标识您身份的信息</b>，信息收集仅为提高文章质量，加强浏览体验所用。如果您对此有任何疑问，或者认为Google Analytics存在危及您的隐私的行为并有证据，可以与博主联系。</div>
</p>

<p>Ivony，程序员，因为太懒所以一直致力于提高开发效率的解决方案，结果发现绝大多数开发团队的开发效率普遍低下，时间并非用于开发而是毫无意义的事情上。八年前进入ASP.NET开发，从企业软件到电子商务，后致力于快速网站开发，改善提高网站开发效率，终得“朝令夕改”<i>（即上午提出需求，下午即修改上线）</i>之效率。</p>

<p>早年混迹于CSDN，也曾任版主。尔后混迹于博客园，以评论讨论问题为乐。</p>

<p style="color: red;">深圳卖身，有意者QQ:3758104，Email:Ivony&#64;live.com。</p><div id="profile_block"><a href="http://home.cnblogs.com/u/Ivony/followers/">粉丝 - 109</a><br/><a href="http://home.cnblogs.com/u/Ivony/followees/">关注 - 7</a><br/><a href="http://home.cnblogs.com/u/Ivony/" target="_blank">我的主页</a>&nbsp; <a href="http://home.cnblogs.com/u/Ivony/detail/" target="_blank">个人资料</a><br/><a href="http://home.cnblogs.com/Ivony/ing/" target="_blank">我的闪存</a>&nbsp; <a href="http://space.cnblogs.com/msg/send/Ivony..." target="_blank">发短消息</a></div>
        </div>
    </div>
</div>

			    <script language="javascript" type="text/javascript">
                        var m = window.__blog.aboutRendered;
                        if (m) { m(__$("about")); }
                </script>
                
<script type="text/javascript">
function zzk_go()
{
	var blogapp = 'Ivony';
	var keystr = encodeURIComponent("blog:"+blogapp+" "+document.getElementById('q').value);
    window.location = "http://zzk.cnblogs.com/s?w="+keystr;
}
function zzk_go_enter(event)
{
	if(event.keyCode == 13)
	{
	    zzk_go();
	    return false;
	}
}
</script>

<div id="mySearchWrapper">
    <div id="mySearch">
        <input type="image" src="/skins/Minyx2_Lite/images/btnsearch.gif" id="btnZzk"  class="submit" onclick="zzk_go();return false;"/>
        <label class="lb_search"><input type="text" id="q" onkeydown="return zzk_go_enter(event);" class="keyword" /></label>
    </div>
</div>

                <script language="javascript" type="text/javascript">
                                var m = window.__blog.searchFormRendered;
                                if (m) { m(__$("searchform")); }
                </script>
                <div id="sideMain">
                </div>
                <div id="sideRight">
                </div>
                <div id="sideLeft">            
                </div>
			    
			    <div id="sideContainer">
			        
<div id="side_ing_block">
<h2>最新闪存</h2>
<ul class="side_ing_list">

		<li><a href="http://home.cnblogs.com/ing/120471/">Jumony M1发布  <a href="http://jumony.codeplex.com/releases/view/51380" target="_blank" class="gray" title="http://jumony.codeplex.com/releases/view/51380">jumony.codeplex.com...</a>  <span class="ing_date">08-28 15:03</span></a></li>		
	
		<li><a href="http://home.cnblogs.com/ing/105506/"> <a href="http://job.cnblogs.com/offer/7490/" target="_blank" class="gray" title="http://job.cnblogs.com/offer/7490/">job.cnblogs.com...</a>  <span class="ing_date">06-03 13:21</span></a></li>		
	
	<li><a href="http://home.cnblogs.com/Ivony/ing/">更多闪存</a></li>
</ul>
</div>
                
                                    
                    

<div id="side-recent-comments">
    <h2>最新评论</h2>
    <ul class="voice">
    
            <li>
                <a href="http://www.cnblogs.com/Ivony/archive/2011/01/25/aspnet-mvc-by-source-8.html#2037487">Re:通过源代码研究ASP.NET MVC（八）</a>
            <br />
            <a class="child" href="http://www.cnblogs.com/Ivony/archive/2011/01/25/aspnet-mvc-by-source-8.html#2037487">
                IValueProvider功能有些意思，实现它是要看modelbinder里面对于复杂对象的binder和validate的实现逻辑。
                 -- Will Meng
            </a>
            </li>
        
            <li>
                <a href="http://www.cnblogs.com/Ivony/archive/2011/01/25/aspnet-mvc-by-source-8.html#2035685">Re:通过源代码研究ASP.NET MVC（八）</a>
            <br />
            <a class="child" href="http://www.cnblogs.com/Ivony/archive/2011/01/25/aspnet-mvc-by-source-8.html#2035685">
                楼主把MVC源码研究的这么透彻了，搬凳子过来学习了。
                 -- lipan
            </a>
            </li>
        
            <li>
                <a href="http://www.cnblogs.com/Ivony/archive/2010/09/02/1815616.html#2034547">Re:园林空气净化器正式版（Fiddler插件）（已升级）</a>
            <br />
            <a class="child" href="http://www.cnblogs.com/Ivony/archive/2010/09/02/1815616.html#2034547">
                FiddlerCore不提供IAutoTamper 接口，想过做个单独的exe，而不用打开fiddler吗？
qq:  136170072

                 -- cnlcg
            </a>
            </li>
        
            <li>
                <a href="http://www.cnblogs.com/Ivony/archive/2010/11/26/aspnet-mvc-by-source-6.html#2034401">Re:通过源代码研究ASP.NET MVC中的Controller和View（六）</a>
            <br />
            <a class="child" href="http://www.cnblogs.com/Ivony/archive/2010/11/26/aspnet-mvc-by-source-6.html#2034401">
                [quote]testzhangsan：
[quote]P_Chou：
[quote]JustAProgrammer：*******Attribute  ---&gt; NonActionAttrib...
                 -- Tenv
            </a>
            </li>
        
            <li>
                <a href="http://www.cnblogs.com/Ivony/archive/2010/12/19/jumony-guide-1.html#2029614">Re:Jumony入门（一）从这里开始</a>
            <br />
            <a class="child" href="http://www.cnblogs.com/Ivony/archive/2010/12/19/jumony-guide-1.html#2029614">
                LINQBridge神器
                 -- MeteorRain
            </a>
            </li>
        
    </ul>
</div>
 
                    
<div id="side-calendar">
<h2>日历</h2>
<table id="Calendar1_entryCal" class="Cal" cellspacing="0" cellpadding="0" title="Calendar" style="border-width:1px;border-style:solid;border-collapse:collapse;">
	<tr><td colspan="7" style="background-color:Silver;"><table class="CalTitle" cellspacing="0" style="width:100%;border-collapse:collapse;">
		<tr><td class="CalNextPrev" style="width:15%;"><a href="javascript:__doPostBack('Calendar1$entryCal','V4049')" style="color:Black" title="Go to the previous month">&lt;</a></td><td align="center" style="width:70%;">2011年3月</td><td class="CalNextPrev" align="right" style="width:15%;"><a href="javascript:__doPostBack('Calendar1$entryCal','V4108')" style="color:Black" title="Go to the next month">&gt;</a></td></tr>
	</table></td></tr><tr><th class="CalDayHeader" align="center" abbr="日" scope="col">日</th><th class="CalDayHeader" align="center" abbr="一" scope="col">一</th><th class="CalDayHeader" align="center" abbr="二" scope="col">二</th><th class="CalDayHeader" align="center" abbr="三" scope="col">三</th><th class="CalDayHeader" align="center" abbr="四" scope="col">四</th><th class="CalDayHeader" align="center" abbr="五" scope="col">五</th><th class="CalDayHeader" align="center" abbr="六" scope="col">六</th></tr><tr><td class="CalOtherMonthDay" align="center" style="width:14%;">27</td><td class="CalOtherMonthDay" align="center" style="width:14%;">28</td><td align="center" style="width:14%;">1</td><td align="center" style="width:14%;">2</td><td align="center" style="width:14%;">3</td><td align="center" style="width:14%;">4</td><td class="CalWeekendDay" align="center" style="width:14%;">5</td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;">6</td><td class="CalTodayDay" align="center" style="width:14%;">7</td><td align="center" style="width:14%;">8</td><td align="center" style="width:14%;">9</td><td align="center" style="width:14%;">10</td><td align="center" style="width:14%;">11</td><td class="CalWeekendDay" align="center" style="width:14%;">12</td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;">13</td><td align="center" style="width:14%;">14</td><td align="center" style="width:14%;">15</td><td align="center" style="width:14%;">16</td><td align="center" style="width:14%;">17</td><td align="center" style="width:14%;">18</td><td class="CalWeekendDay" align="center" style="width:14%;">19</td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;">20</td><td align="center" style="width:14%;">21</td><td align="center" style="width:14%;">22</td><td align="center" style="width:14%;">23</td><td align="center" style="width:14%;">24</td><td align="center" style="width:14%;">25</td><td class="CalWeekendDay" align="center" style="width:14%;">26</td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;">27</td><td align="center" style="width:14%;">28</td><td align="center" style="width:14%;">29</td><td align="center" style="width:14%;">30</td><td align="center" style="width:14%;">31</td><td class="CalOtherMonthDay" align="center" style="width:14%;">1</td><td class="CalOtherMonthDay" align="center" style="width:14%;">2</td></tr><tr><td class="CalOtherMonthDay" align="center" style="width:14%;">3</td><td class="CalOtherMonthDay" align="center" style="width:14%;">4</td><td class="CalOtherMonthDay" align="center" style="width:14%;">5</td><td class="CalOtherMonthDay" align="center" style="width:14%;">6</td><td class="CalOtherMonthDay" align="center" style="width:14%;">7</td><td class="CalOtherMonthDay" align="center" style="width:14%;">8</td><td class="CalOtherMonthDay" align="center" style="width:14%;">9</td></tr>
</table>
</div>
               
                    
<div id="side-categories">
<h2>随笔分类</h2>
<ul class="folder">

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/53520.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/53520.html">.NET(41)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/269844.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/269844.html">ASP.NET MVC(9)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/53521.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/53521.html">ASP.NET WebForm(3)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/273197.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/273197.html">C#(3)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/279272.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/279272.html">Dynamic(0)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/269265.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/269265.html">Funny(3)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/273196.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/273196.html">IT Industry(0)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/279270.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/279270.html">JavaScript(0)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/268656.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/268656.html">Jumony(14)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/277318.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/277318.html">Jumony Guide(4)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/152712.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/152712.html">LINQ(4)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/269267.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/269267.html">OpenSource(13)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/272978.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/272978.html">PowerShell(1)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/269266.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/269266.html">Tools(1)</a> </li>

 <li><a class="mini_rss" href="http://www.cnblogs.com/Ivony/category/269270.html/rss">Rss</a>
 <a href="http://www.cnblogs.com/Ivony/category/269270.html">Watering(3)</a> </li>

</ul>
</div> 
                    

<div id="side-archives">
<h2>随笔档案</h2>
<ul class="date">

 <li><a href="http://www.cnblogs.com/Ivony/archive/2011/01.html">2011年1月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/12.html">2010年12月(5)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/11.html">2010年11月(9)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/10.html">2010年10月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/09.html">2010年9月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/08.html">2010年8月(4)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/07.html">2010年7月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/06.html">2010年6月(4)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/05.html">2010年5月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/03.html">2010年3月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2010/01.html">2010年1月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/12.html">2009年12月(1)</a></li>
 <li><a href='#' onclick="document.getElementById('div_month_more').style.display='block';this.parentNode.style.display='none';return false;" >更多...</a></li></ul><ul style='display:none' class='date' id='div_month_more'>

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/11.html">2009年11月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/10.html">2009年10月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/09.html">2009年9月(7)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/08.html">2009年8月(3)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/07.html">2009年7月(9)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/06.html">2009年6月(3)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2009/05.html">2009年5月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2008/10.html">2008年10月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2008/09.html">2008年9月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2008/08.html">2008年8月(4)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2007/09.html">2007年9月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2007/06.html">2007年6月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2006/10.html">2006年10月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2006/07.html">2006年7月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2006/06.html">2006年6月(1)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2006/05.html">2006年5月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2006/04.html">2006年4月(2)</a></li>
 

 <li><a href="http://www.cnblogs.com/Ivony/archive/2006/03.html">2006年3月(1)</a></li>
 

</ul>
</div> 
                    <div id="MyGroups1_panelMyManageGroups">
<div id="side-group-manange">
<h2>我管理的小组</h2>
<ul class="folder">

			<li><a href="http://space.cnblogs.com/group/101897/">Jumony</a></li>
		
</ul>
</div>
</div>
<div id="MyGroups1_panelMyAttendGroups">
<div id="side-group-attend">
<h2>我参加的小组</h2>
<ul class="folder">

	        <li><a href="http://space.cnblogs.com/group/shanghai/">博客园上海俱乐部</a></li>
		
</ul>
</div>
</div>        
                       
                    
                    
<div id="side-top-posts">
<h2>阅读排行榜</h2>
	
			<ul class="folder">
		
			<li>
				<a href="http://www.cnblogs.com/Ivony/archive/2009/08/20/1550883.html">最近遇到的两个面试题兼卖身广告(4822)</a>				
			</li>
		
			<li>
				<a href="http://www.cnblogs.com/Ivony/archive/2010/06/24/1764677.html">C#呓语：谁说程序都要加载到内存？(4770)</a>				
			</li>
		
			<li>
				<a href="http://www.cnblogs.com/Ivony/archive/2009/11/24/1609760.html">关于那个脑袋的很漂漂的图形的C#版本(4346)</a>				
			</li>
		
			<li>
				<a href="http://www.cnblogs.com/Ivony/archive/2010/05/17/1737037.html">C#中的interface没那么简单(4241)</a>				
			</li>
		
			<li>
				<a href="http://www.cnblogs.com/Ivony/archive/2010/11/13/aspnet-mvc-by-source-1.html">通过源代码研究ASP.NET MVC中的Controller和View（一）(4230)</a>				
			</li>
		
			</ul>
		
</div>               
                    

	
                </div>
                <script language="javascript" type="text/javascript">
                    var m = window.__blog.sideContainerRendered;
                    if (m) { m(__$("sideContainer")); }
                    window.__blog.sidebar.__layout();
                 </script>       	
			                      
 		    </div>
     		
	        <script language="javascript" type="text/javascript">
	        var m = window.__blog.sidebarRendered;
	        if (m) { m(__$("sidebar")); }
                </script>        
     </div>
     
        <script language="javascript" type="text/javascript">
            var m = window.__blog.wrapperRendered;
            if (m) { m(__$("wrapper")); }
        </script>

</div>
<!-- end of container -->
    
<script language="javascript" type="text/javascript">
    var m = window.__blog.containerRendered;
    if (m) { m(__$("container")); }
</script>

<div id="footer">
        
<p id="logoFoot">
    <a href="http://www.spiga.com.mx/" title="Agencia Interactiva Spiga">www.spiga.com.mx</a>
</p>
<div class="footText">
<p>
Copyright &copy;2011 Ivony...
</p>
<p>
<a href="http://www.cnblogs.com">博客园</a>
</p>
</div>
</div><!--end: footer -->

    </form> 
    <script type="text/javascript">
        if (!isSyntaxHighlighted) {
            try {
                SyntaxHighlighter.all();
            } catch (e) { }
        }
    </script>
    <script type="text/javascript" src="http://www.cnblogs.com/script/ShowHidden.js"></script>
    
</body>
</html>
